from mathFunction_Unittest import MyTestCaseTwo
import unittest
from BeautifulReport import BeautifulReport as bf
from Lib import HTMLTestRunner

"""
    在 unittest 单元测试工具中  通过测试集 suite 来 修改测试集中的方法执行时的优先级
"""

if __name__ == '__main__':
    suite = unittest.TestSuite()
    # 通过 suite 测试集 修改方法执行时 的  优先级
    tests = [
        MyTestCaseTwo('test_add'),
        MyTestCaseTwo('test_multi'),
        MyTestCaseTwo('test_less'),
        MyTestCaseTwo('test_except')
    ]
    # 直接在测试集 suite中使用  addTests 添加 多个 测试用例 TestCase
    suite.addTests(tests)

    # 直接在测试集 suite中使用  addTest 添加 单个 测试用例 TestCase
    suite.addTest(MyTestCaseTwo('test_add'))

    # 在测试集 suite中使用  addTests 添加 单个 测试类 通过 单元测试工具unittest中的测试加载器添加
    suite.addTests(unittest.TestLoader().loadTestsFromName('mathFunction_Unittest.MyTestCaseTwo'))

    # 在测试集 suite中使用  addTests 添加 多个 测试类 通过 单元测试工具unittest中的测试加载器添加
    suite.addTests(unittest.TestLoader().loadTestsFromNames(
        [
            'mathFunction_Unittest.MyTestCaseTwo',
            'mathFunction_Unittest.MyTestCaseTwo'
        ]
    ))

    # 在测试集 suite中使用  addTests 添加 单个 测试类 通过 单元测试工具unittest中的测试加载器添加
    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(MyTestCaseTwo))

    """
        如果 在 unittest 中想要生成测试报告 
        1、使用 txt 记事本文件的方式导出报告到本地磁盘中
        2、使用 HTML 方式来报告导出
            1、使用官方的HTML样板
            2、使用第三方的HTML的样板
            3、手写
    """

    # 使用 txt 记事本文件的方式导出报告到本地磁盘中
    # filepath = open('mathFunction_Unittest_Suite_02_reporter.txt', 'a')
    # runner = unittest.TextTestRunner(verbosity=2, stream=filepath)
    # runner.run(suite)

    # 使用 HTML 方式来报告导出 使用官方的HTML样板   BeautifulReport
    # runner = bf(suite)
    # runner.report(description='计算机的测试用例', filename='mathFunction_Unittest_Suite_02_reporter.html')

    runner = HTMLTestRunner.HTMLTestRunner(title='计算机的测试用例', description='计算机的测试用例',
                                           stream=open('mathFunction_Unittest_Suite_02_reporter_03.html', 'wb'),
                                           verbosity=2)
    runner.run(suite)
